iT邦幫忙

2022 iThome 鐵人賽

DAY 4
0
自我挑戰組

數位影像處理系列 第 4

[Day 4]影像的幾何轉換

  • 分享至 

  • xImage
  •  

幾何轉換(Geometric Transformations) 是常用的數位影像處理技術,主要作用為「改變數位影像中的像素空間,但不改變其灰階或色彩值。」


1.空間轉換
介紹幾何轉換前,首先定義空間轉換的方法:
空間轉換可以定義為 https://chart.googleapis.com/chart?cht=tx&chl=(x'%2Cy')%20%3D%20T%7B(x%2Cy)%7D,其中,(x,y)為輸入影像的座標,(x',y')為輸出影像的座標,T稱為空間轉換函數

空間轉換的方法包含正向映射(Forward Mapping)與反向映射(Inverse Mapping),兩者關係如下圖:

https://ithelp.ithome.com.tw/upload/images/20220911/201523700Gv2GWAsrG.png

正向映射主要是根據輸入影像的空間座標(x,y)以及轉換函數T,計算輸出影像映射的空間座標(x',y'),也就是說:

https://chart.googleapis.com/chart?cht=tx&chl=(x'%2Cy')%20%3D%20T%7B(x%2Cy)%7D
再將輸入影像的灰階或色彩值複製到輸出影像。此方法雖然簡單直接,但在進行一些操作的時候,例如放大兩倍等等,可能會有部分輸出影像的像素無直接對應的像素,造成影像的破洞。比如將一個影像放大兩倍,輸入影像座標(0,0)的像素會被映射到輸出影像像素(0,0)、(0,1)被映射到(0,2),可是輸出影像(0,1)和(0,5)等位置沒有直接對應的像素,因此會產生破洞問題。

**反向**映射與正向相反,根據輸出影像座標(x',y')以及反轉換函數T'計算其在輸入影像的座標,也就是說:

https://chart.googleapis.com/chart?cht=tx&chl=(x%2Cy)%20%3D%20T'(x'%2Cy')
再將原始影像灰階或色彩值複製到輸出影像,這樣的方法就不會產生上述的破洞問題,因此實際運用上會以反向映射為主。


2.影像內插
無論採用正向或反向映射,在決定輸出影像像素的灰階色彩值,有可能發生無法對應到整數空間座標的情形,又或是假設今天你電腦或手機螢幕的解析度為2K,但要撥放的影片解析度只有Full HD,那這種情況要怎麼辦呢?此時即就需要內插法(Interpolation)處理。

以下介紹幾種常見內插法,包含:最鄰近內插法(Nearest Neighbor Interpolation)、雙線性內插法(Bilinear Interpolation)、雙立方內插法(Bicubic Interpolation)。

2-1 最鄰近內插法
最鄰近內插法是最簡單的方法,也稱為零揭內插法(Zero-Order Interpolation)。這方法是根據離映射點最近的空間座標像素取其灰階值或色彩值,如下圖所示:
https://ithelp.ithome.com.tw/upload/images/20220911/20152370Dsa11WXtmQ.png
當要放大的倍率越多,可以明顯的發現此方法的效果就越差,就會產生有些地方會有馬賽克一格一格的效果。

2-2 雙線性內插法
此方法又稱為二階內插法(Second-Order Interpolation),既然上一個方法只參考最近的像素,那麼這次我們就參考四週頂點的像素,並依據距離的權重來決定我們要的值。
https://ithelp.ithome.com.tw/upload/images/20220911/20152370ma0n0GpPsQ.png
如上圖所示,欲求P(x,y),可以先參考P點四週的頂點位置,
https://chart.googleapis.com/chart?cht=tx&chl=Q_1_1%3D(x1%2Cy1)%20%20%20%20Q_1_2%20%20%3D%20(x1%2Cy2)%20%20%20Q_2_1%20%3D%20(x2%2Cy1)%20%20%20Q_2_2%20%3D%20(x2%2Cy2)


https://chart.googleapis.com/chart?cht=tx&chl=a'%20%3D%20x2%20-%20x1%20
https://chart.googleapis.com/chart?cht=tx&chl=b'%20%3D%20y2%20-%20y1
https://chart.googleapis.com/chart?cht=tx&chl=a%20%3D%20x%20-%20x1
https://chart.googleapis.com/chart?cht=tx&chl=b%3D%20y%20-%20y1


https://chart.googleapis.com/chart?cht=tx&chl=P(x%2Cy)%20%3D%20(%20(a'-a)(b'-b)Q_1_1%20%2B%20a(b'-b)Q_2_1%20%2B%20b(a'-a)Q_1_2%20%2B%20abQ_2_2%20)%20%2F%20(%20a'%20*%20b'%20)

雙線性內插法由於其計算複雜度不高、效果也不錯,因此是蠻實用的內插法。

2-3 雙立方內插法
又稱為三階內插法(Third-Order Interpolation),看到三階這個詞可以發現這是從上一個內插法演變而來,這次參考四週16個點的像素值,因此計算複雜度變得更高了。
https://chart.googleapis.com/chart?cht=tx&chl=p(x%2Cy)%20%3D%20%5Csum%5Climits_%7Bi%3D0%7D%5E3%20%5Csum_%7Bj%3D0%7D%5E3%20a_%7Bij%7D%20x%5Ei%20y%5Ej.

此方法的計算量大,由於參考點更多,可以保留較精確的影像細節品質,但在即時影像處理較不實用。


除了上述幾個典型的內插法,OpenCV本身也提供更高階的方法,例如Lanczos 8 * 8 內插法、反混跌(Anti-Aliasing)等等,這些方法的計算量相對來說也比較大,因此通常不會採用。


上一篇
[Day 3] 數位影像的取樣量化
下一篇
[Day 5] 影像的縮放與旋轉
系列文
數位影像處理30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言